ホームに戻る
出典 :
関連 :
目次 :
ユーザーコントロールの概要
複数のコントロールを組み合わせたものをひとつのコントロールとして使いまわしたい場合、
それらを「ユーザーコントロール」として定義することで、再利用可能なコントロールとなる。
尚、「カスタムコントロール」とは異なる。
外観の複雑なカスタマイズは不可能であるため、カスタマイズを目的とする場合はカスタムコントロールを使用することとなる。
作成手順・実装例
ここでは、2つの Label コントロールを持つユーザーコントロール MachineErrIndicator を作成する。
- 準備
-
Visual Studioメニュー「プロジェクト」>「新しい項目の追加」を選択する。
-
「Visual C# アイテム」>「WPF」>「ユーザー コントロール (WPF)」を選択し、任意のコントロール名を割り当てる。
ここでは "MachineErrIndicator" とする。
- XAMLの実装 (MachineErrIndicator.xaml)
-
デザイン
-
XAML
- コードビハインドの実装 (MachineErrIndicator.xaml.cs)
プロパティの実装に関しては、依存関係プロパティを参照。

-
参照側XAMLの実装 (StatusWindow.xaml)
何が起こっているか
-
手順 2.2. では、ユーザーコントロール MachineErrIndicator のプロパティ SigNum 、SigName と、Label の依存関係プロパティ Content とでデータバインドを形成している。
これにより、Label に表示される文言を MachineErrIndicator のプロパティとして操作できるようになる。
-
手順 3. では、ユーザーコントロール MachineErrIndicator のプロパティ SigNum 、SigName をそれぞれ依存関係プロパティに関連付けている。
これにより、MachineErrIndicator を参照するコントロールから、これらのプロパティをターゲットとしたデータバインディングが可能となる。
-
手順 4. では、ユーザーコントロール MachineErrIndicator の依存関係プロパティ SigNum (SigNumProperty)、SigName (SigNameProperty) に値を設定している。
設定値は SigNum 、SigName に反映されるとともに、データバインドを介して Label の文言に反映される。
ユーザーコントロールの階層化
ユーザーコントロールには別のユーザーコントロールを含めることも可能である。
最も外側のユーザーコントロールを操作して最も内側のコントロールを変化させたい場合は、
下図のようにデータバインドを各段階で用いる。

上図では依存関係プロパティ MogoProperty を操作することで、ラッパープロパティ Mogo を介して
すぐ内側のユーザーコントロール上の FugaProperty に伝播する。
同様に FugaProperty の変化は Fuga を介して HogeProperty に伝播し、結果として表示に反映される。
(プロパティ Mogo を操作した場合も同様。)
注意が必要な点
UserControl の自立性
UserControl は Window と異なり、独立して表示させることはできない。
つまり、UserControl は Window 内に配置することではじめて動作する。UserControl 内に Window を配置することもできない。
UserControl へのスタイル適用
UserControl に対して、スタイルを定義した外部リソースを適用する際は注意が必要となる。
詳細はリンク先を参照のこと。
(リンク先の Window は UserControl と読み替えられたし。)